/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


var FlashDetect = new function(){
    var self = this;
    self.installed = false;
    self.raw = '';
    self.major = -1;
    self.minor = -1;
    self.revision = -1;
    self.revisionStr = '';
    var activeXDetectRules = [
    {
        'name':'ShockwaveFlash.ShockwaveFlash.7',
        'version':function(obj){
            return getActiveXVersion(obj);
        }
    },
    {
        'name':'ShockwaveFlash.ShockwaveFlash.6',
        'version':function(obj){
            var version = '6,0,21';
            try{
                obj.AllowScriptAccess = 'always';
                version = getActiveXVersion(obj);
            }catch(err){}
            return version;
        }
    },
    {
        'name':'ShockwaveFlash.ShockwaveFlash',
        'version':function(obj){
            return getActiveXVersion(obj);
        }
    }
    ];

    var getActiveXVersion = function(activeXObj){
        var version = -1;
        try{
            version = activeXObj.GetVariable('$version');
        }catch(err){}
        return version;
    };

    var getActiveXObject = function(name){
        var obj = -1;
        try{
            obj = new ActiveXObject(name);
        }catch(err){
            obj = {
                activeXError:true
            };
        }
        return obj;
    };
    var parseActiveXVersion = function(str){
        var versionArray = str.split(',');//replace with regex
        return {
            'raw':str,
            'major':parseInt(versionArray[0].split(' ')[1], 10),
            'minor':parseInt(versionArray[1], 10),
            'revision':parseInt(versionArray[2], 10),
            'revisionStr':versionArray[2]
        };
    };
    var parseStandardVersion = function(str){
        var descParts = str.split(/ +/);
        var majorMinor = descParts[2].split(/\./);
        var revisionStr = descParts[3];
        return {
            'raw':str,
            'major':parseInt(majorMinor[0], 10),
            'minor':parseInt(majorMinor[1], 10),
            'revisionStr':revisionStr,
            'revision':parseRevisionStrToInt(revisionStr)
        };
    };
    var parseRevisionStrToInt = function(str){
        return parseInt(str.replace(/[a-zA-Z]/g, ''), 10) || self.revision;
    };

    self.revisionAtLeast = function(version){
        return self.revision >= version;
    };
    self.versionAtLeast = function(major){
        var properties = [self.major, self.minor, self.revision];
        var len = Math.min(properties.length, arguments.length);
        for(i=0; i<len; i++){
            if(properties[i]>=arguments[i]){
                if(i+1<len && properties[i]==arguments[i]){
                    continue;
                }else{
                    return true;
                }
            }else{
                return false;
            }
        }
    };
    self.FlashDetect = function(){
        if(navigator.plugins && navigator.plugins.length>0){
            var type = 'application/x-shockwave-flash';
            var mimeTypes = navigator.mimeTypes;
            if(mimeTypes && mimeTypes[type] && mimeTypes[type].enabledPlugin && mimeTypes[type].enabledPlugin.description){
                var version = mimeTypes[type].enabledPlugin.description;
                var versionObj = parseStandardVersion(version);
                self.raw = versionObj.raw;
                self.major = versionObj.major;
                self.minor = versionObj.minor;
                self.revisionStr = versionObj.revisionStr;
                self.revision = versionObj.revision;
                self.installed = true;
            }
        }else if(navigator.appVersion.indexOf('Mac')==-1 && window.execScript){
            var version = -1;
            for(var i=0; i<activeXDetectRules.length && version==-1; i++){
                var obj = getActiveXObject(activeXDetectRules[i].name);
                if(!obj.activeXError){
                    self.installed = true;
                    version = activeXDetectRules[i].version(obj);
                    if(version!=-1){
                        var versionObj = parseActiveXVersion(version);
                        self.raw = versionObj.raw;
                        self.major = versionObj.major;
                        self.minor = versionObj.minor;
                        self.revision = versionObj.revision;
                        self.revisionStr = versionObj.revisionStr;
                    }
                }
            }
        }
    }();
};
FlashDetect.JS_RELEASE = '1.0.4';